TypeScript 型
以下は、最初のころのメモ
type foo = {name:string, v:number}
type キーワードで型情報を変数として持てる?
type foo = typeof bar で、typeof演算子? によって、barが持つ型情報を取り出せる。ここではtypeキーワードで変数に代入。
通常の interfaceキーワードもある。違いは、
Interfaceを満たすオブジェクトは「少なくともその仕様の必要条件を満たしている」だけで、他にプロパティが存在する可能性があると想定しているのに対し、Typeに属するオブジェクトは「文字通りその型のオブジェクト」であり、他のプロパティの存在を考慮しなくなるようだ
interfaceは必要条件、typeは必要十分条件
@20200110 再度読んだ。もうちょっとなれる必要がある。@20201227 再度(読み飛ばしたが...得るものはあった)
以下、なれる必要があるか、、現状の自分にはそんなに必要ない?
upcast, downcast:
downで型集合?の範囲が狭くなるイメージ
処理の対象を狭くすると、対象範囲外がでてくるので、実行時?のエラーを作ってしまう可能性がある。
よって、downcastは安全ではない。
upcastは安全だが、
intersection, union型
union型は undefinedをつけたりして、使う場面をイメージできるけど、
intersection型はいつ使うのか?
他の言語で、mixinなど、拡張したいとき?
上記では、loggableなclassと通常のclassの両インスタンスを引数にとって、intersectionなオブジェクトを返してる。
機能を追加したいとき?
参考:
自分は、全然理解できてない。